package com.zw.a.basic.a13.demo04_synchronized;

//案例: 模拟卖票,  100张票, 由4个窗口售卖.
/*
    线程同步(安全)问题:
        概述:
            多线程 并发 操作同一资源, 就有可能引发安全问题, 需要使用同步解决.
            大白话翻译: 可以把同步理解为加锁, 加上锁后, 某个线程没有执行完的情况下, 其他线程处于等待状态.

        同步的分类:
            同步代码块:
                格式:
                    synchronized(锁对象) {
                        //要加锁的代码
                    }
                注意事项:
                    1. 同步代码块的锁对象可以是任意类型的对象.
                    2. 必须使用同一把锁, 否则可能出现锁不住的情况.

            同步方法:

    细节:
        线程同步(安全), 效率相对较低.
        线程不同步(不安全), 效率相对较高.
 */
public class Demo {
    public static void main(String[] args) {
        //1. 创建4个窗口, 即: 4个线程.
        MyThread mt1 = new MyThread("窗口1");
        //mt1.setName("窗口1");
        MyThread mt2 = new MyThread("窗口2");
        MyThread mt3 = new MyThread("窗口3");
        MyThread mt4 = new MyThread("窗口4");

        //2. 开启线程, 卖票即可.
        mt1.start();
        mt2.start();
        mt3.start();
        mt4.start();
    }
}
